﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using PapaDogAdmin.Modelo;
using MySql.Data.MySqlClient;

namespace PapaDogAdmin.Negocio
{
    public class PerrosNegocio
    {
        #region METODOS DE TEST VOLARLOS

        private IList<Perro> leerPerrosTest()
        {
            IList<Perro> listaPerros = new List<Perro>();

            ///////////////////////////
            Perro unPerro = new Perro();
            unPerro.ID = 2;
            unPerro.Nombre = "Toto";
            unPerro.Edad = 5;
            unPerro.Duenio = "Vir";
            unPerro.Raza = "Mestizo Asalchichado";

            Perro otroPerro = new Perro();
            otroPerro.ID = 3;
            otroPerro.Nombre = "Lola";
            otroPerro.Edad = 4;
            otroPerro.Duenio="Sole";
            otroPerro.Raza = "Mestiza Whippet";

            Perro unPerroMas = new Perro();
            unPerroMas.ID = 4;
            unPerroMas.Nombre = "Broly";
            unPerroMas.Edad = 4;
            unPerroMas.Duenio = "Geri";
            unPerro.Raza = "Mestizo HuboOvejeroAqui";

            Perro elCucu = new Perro();
            elCucu.ID = 1;
            elCucu.Nombre = "Lucky";
            elCucu.Edad = 8;
            elCucu.Duenio = "Soledad";
            elCucu.Raza = "Mestizo ElMejor";

            listaPerros.Add(unPerro);
            listaPerros.Add(otroPerro);
            listaPerros.Add(unPerroMas);
            listaPerros.Add(elCucu);

            return listaPerros;
        }
        
        public IList<Perro> Listar(string nombre)
        {
            IList<Perro> listaPerros = this.leerPerrosTest();

            if (!string.IsNullOrEmpty(nombre))
                listaPerros = listaPerros.Where(perro => perro.Nombre.ToUpper().Trim() == nombre.ToUpper().Trim()).ToList();

            return listaPerros;
        }
        
        public Perro ObtenerPerro_TEST(int IdPerro) 
        {
            return this.leerPerrosTest().Where(perro => perro.ID == IdPerro).FirstOrDefault();
        }
        
        #endregion

        #region Stored Procedures

        private class StoredProcedures
        {
            public static string PER_OBTENER = "sp_per_obtener";
            public static string PER_OBTENER_TODOS = "sp_per_obtenerTodos";
            public static string PER_ELIMINAR = "sp_per_eliminar";
        }

        public static class Parametros
        {
            public static string idPerro = "p_IdPerro";
        }

        #endregion

        #region Metodos

        public Perro Obtener(int IdPerro)
        {
            List<DBParametro> listaParametros = new List<DBParametro>()
            { 
                new DBParametro(Parametros.idPerro, IdPerro)
            };

            //DBParametro parametroId = new DBParametro("p_IdPerro", IdPerro);
            //listaParametros.Add(parametroId);

            Perro unPerro = DBHelper.GetInstance().ExecuteSingle<Perro>(StoredProcedures.PER_OBTENER, listaParametros);

            return unPerro;
        }

        public IList<Perro> ObtenerTodos()
        {
            return DBHelper.GetInstance().ExecuteList<Perro>(StoredProcedures.PER_OBTENER_TODOS);
        }

        public void Eliminar(int IdPerro)
        {
            List<DBParametro> listaParametros = new List<DBParametro>()
            {
                new DBParametro(Parametros.idPerro,IdPerro)
            };

            DBHelper.GetInstance().ExecuteNonQuery(StoredProcedures.PER_ELIMINAR, listaParametros);
        }

        #endregion
    }
}
